//
//  AddSomeView.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/28.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit
import pop

class AddSomeView: UIView
{
    
    // 代表记录mainVc
    //设置记录targetVC
    var target: UIViewController?

    //懒加载背景图片(背景图片直接使用当前背景图片的截图)
    private lazy var backImage:UIImageView = UIImageView(image: UIImage.ScreenShot().applyLightEffect())
    

    //懒加载新浪的图标到背景图片上
    private lazy var logoImage:UIImageView = UIImageView(imgName: "compose_slogan")
    
    //懒加载一个自定义button的数组
    private lazy var buttonArray:[AddSomeButton] = [AddSomeButton]()
    
    //懒加载一个数组，用于设置button
    private lazy var dataModels:[AddButtonModel] = {
       
        
        //读取本地的plist文件，并且字典转模型
        //(1)path
        let path = NSBundle.mainBundle().pathForResource("compose.plist", ofType: nil)!
        
        //(2)tempArray
        let tempArray = NSArray(contentsOfFile: path)!
        
        //(3)创建一个可变数组
        var mutableArray:[AddButtonModel] = [AddButtonModel]()
        
        //(4)遍历数组，字典转模型
        for dict in tempArray
        {
            //字典转模型
            let model = AddButtonModel(dict: dict as! [String:AnyObject])
            
            mutableArray.append(model)
        }
        
        return mutableArray
    }()
    
    
    
    
    
    override init(frame: CGRect)
    {
        super.init(frame: frame)
        
        //布局界面
        setUpUI()
    }
    
    required init?(coder aDecoder: NSCoder)
    {
        fatalError("init(coder:) has not been implemented")
    }
    
   
    //布局界面
    func setUpUI()
    {
        self.backgroundColor = UIColor.whiteColor()
        
        //添加截图的背景图片
        addSubview(self.backImage)
        
        //添加logo图片到背景图片上
        addSubview(self.logoImage)
        
        //添加子butto到界面上
        addSomeButton()
        
        
        
        //设置背景图片的约束
        self.backImage.snp_makeConstraints { (make) in
            
            make.edges.equalTo(UIEdgeInsetsZero)
        }
        
        //设置logo图片的约束
        self.logoImage.snp_makeConstraints { (make) in
            make.top.equalTo(self).offset(100)
            make.centerX.equalTo(self.snp_centerX)
        }
        
        
    }
    
    //添加子button到主界面上
    func addSomeButton()
    {
        // 按钮的宽和高
        let childW: CGFloat = 80
        let childH: CGFloat = 110
        // 按钮间距
        let childMargin: CGFloat = (SCREENW - childW*3)/4
    
        //遍历按钮的数据数组，给按钮设置frame,title,image
        for (i,value) in dataModels.enumerate()
        {
            //返回行和列
            let row = CGFloat(i/3)
            let col = CGFloat(i%3)
            
            //创建button
            let button:AddSomeButton = AddSomeButton()
            
            //(1)设置button的image
            button.setImage(UIImage(named:value.icon ?? ""), forState: UIControlState.Normal)
            
            //(2)设置title
            button.setTitle(value.title ?? "", forState: UIControlState.Normal)
            
            //(3)设置frame
            let buttonX = childMargin * (col+1) + childW * col
            
            //通过设置button的y轴超过当前界面来使button看上去是“隐藏”的效果
            let buttonY = (childMargin + childH) * row + SCREENH
            
            
            button.frame = CGRect(x: buttonX, y: buttonY, width: childW, height: childH)
            
            //(4)设置button的触发事件
            button.addTarget(self, action: #selector(AddSomeView.buttonClick(_:)), forControlEvents: UIControlEvents.TouchUpInside)
            
            //(5)给每一个button匹配一个的model
            button.model = value
            
            
            //(5)添加到主界面
            addSubview(button)
            
            //(6)添加button到数组上
            buttonArray.append(button)
        }
    
    }
    
    
    //设置button的点击触发事件
    func buttonClick(button:AddSomeButton)
    {
        //点击当前按钮之后，当前的按钮有一个变大的效果,其他的按钮变小

                //当前按钮的变大效果
                UIView.animateWithDuration(0.25, animations: {
                    
                    
                    //遍历按钮数组
                    for value in self.buttonArray
                    {
                        value.alpha = 0.2
                        
                        
                        //如果是当前的按钮，则变大
                        if value == button
                        {
                            value.transform = CGAffineTransformMakeScale(2, 2)
                        }
                        //如果不是当前的按钮，则缩小
                        else
                        {
                            value.transform = CGAffineTransformMakeScale(0.2,0.2)
                        }
                        
                    }
                    
                    }, completion: { (_) in
                        
                        
                        
                        UIView.animateWithDuration(0.25, animations: {
                            
                            //遍历按钮数组
                            for value in self.buttonArray
                            {
                                //返回到原来的大小和透明度
                                value.alpha = 1
                            
                                    value.transform = CGAffineTransformIdentity
                            }
                            
                            
                            }, completion: { (_) in
                            
                                
                                //点击完成之后，跳入到指定的VC
                                //取指定dataModels中的model数据，
                                guard let model = button.model else
                                {
                                    return
                                }
                                
                                guard let nVC = model.nextvc else
                                {
                                    return
                                }
                                
                                //根据nVC字符串的值来获取指定VC class
                                //(1)取当前的项目名
                                guard let pn = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as? String else
                                {
                                    return
                                }
                                
                                // 判断class 是否为nil 而且是否可以转成UIViewController.Type
                                // 为什么 “SHComposeViewController” 因为OC中根本没有命名空间 erSwift中有命名空间
                                // 如果Swift中获取自定义类的class [项目名.类名]
                                //(2)根据当前的应用名和类名来拼接一个新的类名
                                //一定要写上所有控制器的父类类型:UIViewController.Type
                                guard let cn = NSClassFromString(
                                "\(pn).\(nVC)") as? UIViewController.Type else
                                {
                                    return
                                }
                                
                                //(3)根据获取的cn来初始化目标的控制器
                                 //初始化一个cn类对象
                                 let tempVc = cn.init()
                                 let navC = UINavigationController(rootViewController: tempVc)
                                 self.target?.presentViewController(navC, animated: true, completion: { () -> Void in
                                 self.removeFromSuperview()
                                 })
 
                                
                        })
                        
                })
        
    }
    
    
    //按钮的动画开启
    func buttonShow()
    {
        //按照正向的顺序遍历按钮数组 分别设置动画
        //按钮按照数组的顺序依次地运动
        for (i,value) in buttonArray.enumerate()
        {
            //设置动画(弹簧动画)
            let anim = POPSpringAnimation(propertyNamed: kPOPViewCenter)
            
            //设置终点位置(每一个按钮的中心点)
            anim.toValue = NSValue(CGPoint: CGPoint(x: value.center.x, y: value.center.y - 350))
            
            //开始时间(???）
            anim.beginTime = CACurrentMediaTime() + Double(i)*0.025
            
            //弹簧系数
            anim.springBounciness = 10
            
            //动画速度
            anim.springSpeed = 8
            
            //动画添加到button上
            value.pop_addAnimation(anim, forKey: nil)
            
        }
    }
    
    
    
    //当点击界面时，当前的view从父view上消失
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
    {
        
        //按照数组逆序的顺序依次地运动
        for (i,value) in buttonArray.reverse().enumerate()
        {
            // 设置动画
            let anim = POPSpringAnimation(propertyNamed: kPOPViewCenter)
            // 设置tovalue
            anim.toValue = NSValue(CGPoint: CGPoint(x: value.center.x, y: value.center.y + 350))
            // 开始时间
            anim.beginTime = CACurrentMediaTime() + Double(i)*0.025
            // 弹性系数
            anim.springBounciness = 10
            // 动画速度
            anim.springSpeed = 8
            value.pop_addAnimation(anim, forKey: nil)
        }
        
         // 延迟删除当前view
        
        //TODO:不能使用
        //不能使用以下代码！！！！！
        //NSThread.sleepForTimeInterval(2)
    
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(0.4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
            self.removeFromSuperview()
        }
        
    }
    
    
}
